#include <stdio.h>
#include <stdlib.h>
#include "parser.h"
#include "diccionario.h"

int main(int argc, char *argv[]){

    struct Tparser      parser;
    struct TConstructor constructor;
    Tcallback callback = NULL;

    if(argc > 0)
        Tparser_Crear(&parser,argv[1]);

    TConstructor_Crear(&constructor);

    Tparser_GetUltimoError(&parser, &(parser.cod_error) , parser.mensaje);

    if(parser.cod_error == SIN_ERROR){ /*UNICO ERROR POSIBLE ES ERROR EN APERTURA*/
        while(!feof(parser.Parchivo)){

            Tparser_PushChar(&parser,fgetc(parser.Parchivo));

            while((callback = Tparser_ObtenerCallback(&parser))!=NULL)
                callback(&constructor,(void*)Tparser_ObtenerDato(&parser));

            Tparser_GetUltimoError(&parser, &(parser.cod_error), parser.mensaje);
            if(parser.cod_error != SIN_ERROR){
                printf("%s\n",parser.mensaje);
                break;
            }
        }
        /*TERMINA EL ARCHIVO, Y SE VERIFICA SI QUEDO ALGUN ERROR*/
        if(parser.cod_error == SIN_ERROR){
            Tparser_TerminarFlujo(&parser);
            Tparser_GetUltimoError(&parser, &(parser.cod_error), parser.mensaje);

            if(parser.cod_error != SIN_ERROR){
                printf("%s\n",parser.mensaje);
            }
        }
    }else{
        printf("%s",parser.mensaje);
    }

    TConstructor_ImprimirListado(&constructor);

    TConstructor_Destruir(&constructor);
    Tparser_destruir(&parser);

    return 0;
}

